'''
Author: Diana Tang
Date: 2025-04-03 22:46:17
LastEditors: Diana Tang
Description: some description
FilePath: /public_health_-ai_teacher/run.py
'''
#!/usr/bin/env python3
"""
公共卫生知识库启动脚本
使用方法：python run.py
"""

import os
import sys
import subprocess
import webbrowser
from time import sleep

def check_requirements():
    """检查必要的依赖是否安装"""
    try:
        import streamlit
        import pandas
        import matplotlib
        import seaborn
        import jieba
        print("✅ 所有必要的依赖已安装")
        return True
    except ImportError as e:
        print(f"❌ 缺少必要的依赖: {e}")
        print("正在尝试安装缺失的依赖...")
        
        try:
            subprocess.check_call([sys.executable, "-m", "pip", "install", 
                                  "streamlit", "pandas", "matplotlib", "seaborn", "jieba"])
            print("✅ 依赖安装成功")
            return True
        except Exception as e:
            print(f"❌ 安装依赖失败: {e}")
            print("请手动运行: pip install streamlit pandas matplotlib seaborn jieba")
            return False

def check_document_dir():
    """检查文档目录是否存在，如果不存在则创建"""
    doc_dir = "./public_health_docs"
    if not os.path.exists(doc_dir):
        print(f"📁 创建文档目录: {doc_dir}")
        os.makedirs(doc_dir)
        print(f"ℹ️ 请将您的公共卫生文档（PDF、DOCX、TXT）放入 {doc_dir} 目录")
    else:
        files = os.listdir(doc_dir)
        if not files:
            print(f"⚠️ 文档目录 {doc_dir} 为空，请添加一些文档")
        else:
            print(f"✅ 文档目录 {doc_dir} 已存在，包含 {len(files)} 个文件")

def start_app():
    """启动知识库应用"""
    print("🚀 正在启动公共卫生知识库应用...")
    
    # 检查是否存在高级版本
    if os.path.exists("advanced_app.py"):
        app_path = "advanced_app.py"
        print("ℹ️ 使用高级版本界面")
    else:
        app_path = "app.py"
        print("ℹ️ 使用标准版本界面")
    
    # 启动Streamlit应用
    try:
        # 使用子进程启动Streamlit
        process = subprocess.Popen(
            [sys.executable, "-m", "streamlit", "run", app_path, "--server.port=8888"], 
            stdout=subprocess.PIPE
        )
        
        # 等待应用启动
        print("⏳ 正在等待应用启动...")
        sleep(3)
        
        # 自动打开浏览器
        url = "http://localhost:8888"
        print(f"🌐 在浏览器中打开: {url}")
        webbrowser.open(url)
        
        print("✅ 应用已启动！按Ctrl+C停止应用")
        
        # 保持脚本运行
        process.wait()
    except KeyboardInterrupt:
        print("\n👋 停止应用...")
        process.terminate()
    except Exception as e:
        print(f"❌ 启动应用时出错: {e}")
        print("请手动运行: streamlit run app.py")

if __name__ == "__main__":
    print("=" * 50)
    print("🧬 公共卫生知识库系统")
    print("=" * 50)
    
    if check_requirements():
        check_document_dir()
        start_app()